import axios  from "axios";
import qs from 'qs';

// axios可以创建实例对象
// 创建了axios的实例对象的方法 axios.create
const service = axios.create({});
// http://localhost:8001 service
// http://localhost:8002  service2

// axios.defaults.baseURL
service.defaults.baseURL = "/api";
service.defaults.timeout = 5000;

// 请求拦截器
let interceptor = service.interceptors.request.use(config=>{
    console.log('请求拦截器');
    console.log(1)
    // console.log(config);
    return config
});

// 响应拦截器
let resInterceptor = service.interceptors.response.use(response=>{
    console.log('响应拦截器');
    // console.log(response);
    console.log(2)
    return response;
})
// 移除拦截器
service.interceptors.request.eject(interceptor);
service.interceptors.response.eject(resInterceptor);



// 将咱们刚才封装的两个get post 变成1个函数
// 参数说明：method: 请求方式  get post
//  url: 地址  ''
//  params: get请求的参数 {} 
// data: post请求的参数 {}
// headerType: '' 'form'
function request({method,url,params,data,headerType}){


// headers 不同的请求或者不同数据需要进行不同的处理 content-type不同
// service.defaults.headers
    if(method.toLowerCase() == "post"){
        // 由于不同的文件类型 content-type不同  谁能告诉咱们到底当前传送过来的数据是什么类型  造一个标识告诉到底是什么文件 headerType
        if(headerType == 'form'){
            service.defaults.headers['Content-Type'] = "application/x-www-form-urlencoded;charset=utf-8";
            // 表单提交的数据需要序列化
            data = qs.stringify(data);
        }else{
            service.defaults.headers['Content-Type'] = "application/json;charset=utf-8"
        }
    }
    // get
    if(method.toLowerCase() == 'get'){
        // get请求发送表单数据
        if(headerType == 'form'){
            service.defaults.headers['Content-Type'] = "application/x-www-form-urlencoded;charset=utf-8";
        }
    }

// transformrequest  transformresponse都需要特殊处理
// params data

    return new Promise((resovle,reject)=>{
        service({
            method,
            url,
            params,
            data,
            transformRequest:[function(data){
                console.log(3)
                return data;
            }],
            transformResponse:[function(data){
                console.log(4)
                return data;
            }]            
        }).then(res=>{
            resovle(res);
        }).catch(err=>{
            reject(err);
        })
    })
}

export default request;